
import java.util.HashMap;
import java.util.List;
import java.util.Set;

// 写一个通用的顺序表
class MyArrayList<E>{// 这里的E代表当前类是一个泛型类，这里的E只是一个占位符
    private E[] elem;
    private int usedSize;

    public MyArrayList(){
        this.elem = (E[]) new Object[10];
    }
    public void add(E val){
        this.elem[usedSize] = val;
        usedSize++;
    }
    public E get(int index){
        return this.elem[index];
    }
}
public class TestDemo{
    public static void main(String[] args) {
        String[] strings = new String[12];
        Object o = new String[12];
        Object[] o1 = new String[2];
    }

    public static void main2(String[] args) {
        MyArrayList<String> listString = new MyArrayList<>();
        System.out.println(listString);
        MyArrayList<Integer> listInt = new MyArrayList<>();
        System.out.println(listInt);
        MyArrayList<Boolean> listBoolean = new MyArrayList<>();
        System.out.println(listBoolean);
        // 输出都是 MyArrayList@哈希值 ：泛型中<>里面的内容，不参与类型的组成

        // 泛型是怎么编译的
        // 1、泛型是编译期的一种机制：擦除机制，运行时就没有了，Object
    }

    public static void main1(String[] args) {
        // 泛型的作用：把类型的参数换了
        // 1、泛型会自动检查你放入的类型是否正确
        // 2、自动对类型进行强制类型转换
        MyArrayList<String> listString = new MyArrayList<>();
        listString.add("hello");
        // listString.add(2);// 这里报错了
        MyArrayList<Integer> listInt = new MyArrayList<>();
        listInt.add(23);
        MyArrayList<Boolean> listBoolean = new MyArrayList<>();
        listBoolean.add(false);
    }
}
